<?php
namespace App\Models\Admin;




use App\Jobs\Fun;
use App\Services\Api\OrderTemp;

/**
 * This is the model class for table "orders_bales".
 * @property int10unsigned id	订单id
 * @property int10unsigned uid	用户ID
 * @property varchar50 name	订单产品名称
 * @property tinyint3unsigned cate	货单搜索分类，关联category的PID为167
 * @property varchar20 styleNo	款号
 * @property varchar20 styleName	款式名称
 * @property mediumint2unsigned num	数量，件
 * @property decimal102unsigned money	单价，元
 * @property decimal102 allmoney	总价
 * @property varchar50 scence	适用场景
 * @property varchar50 material	材质
 * @property varchar255 tech	工艺要求
 * @property text sizelist	尺码，数组json：
* 0S，1M，2L，3XL，4XXL，5XXXL；
* 0白，1红，2蓝；
 * @property varchar255 img	产品正面图
 * @property text imgDetails	细节图集，json数组，款式图、粘衬部位、背面图、关键部位细节、关键部位细节图
 * @property tinyint1unsigned proType	外发要求，1本地生产，2外地生产
 * @property mediumint8unsigned region	外发范围，地区选择
 * @property tinyint1unsigned proWay	生产要求，1流水做，2整件做
 * @property varchar100 outTypeStr	货单分类集合，通过英文逗号隔开，关联category的，工厂外发PID=174，公司外发PID=185，
 * @property int10unsigned period	截止有效时间s 交货时间
 * @property text stuff	面辅料成分/缩率，二维数组json，key+val对
 * @property text deplete	面辅料单耗，二维数组json：name 名称，size 规格，num 用量，remark 备注
 * @property text orderType	产品类型，json：name 产品名称，male 男装，female 女装，child 童装
 * @property varchar255 style	产品风格名称数组，用||隔开
 * @property varchar255 design	产品款式名称数组，用||隔开
 * @property text detail	货单描述
 * @property tinyint1unsigned is_rob	是否抢单：1抢单，2普通单，
 * @property tinyint1unsigned is_fabric	是否提供原料面料：1不提供，2提供但未填写，3提供并已填写，
 * @property tinyint1unsigned is_contract	订单合同：1未上传，2发单方上传，3合作方上传，
 * @property tinyint1unsigned status	抢单状态：1未开始抢单，2抢单中，3已完成抢单
 * @property tinyint1unsigned del	0不删除，1删除
 * @property int10unsigned created_at	发布时间
 * @property int10unsigned updated_at	更新
 * @property decimal102unsigned bond	保证金  元
 * @property int10unsigned level_DELETE_QIYONG	要求的等级
 * @property text costlist	成本明细表
* UserLevelModel:
* const  type_yipin = 1010;
* const  type_erpin = 1020;
* const  type_sanpin = 1030;
* const  type_sipin = 1040;
* const  type_wupin = 1050;
* const  type_xiaozuofang = 1060;
* const  type_yeyu = 1070;
 */
class OrderBaleModel extends BaseModel
{

    const Max_qiangdanshu=3;///最多几个工厂抢单

    const status_weikaishi=1;   //抢单状态：1未开始抢单，2抢单中，3已完成抢单

    const status_kaishi=2;
    const status_wancheng=3;


    const visible_hide=0;
    const visible_show=1;


    public static function getStatus($status=null){
        $list=[
            self::status_weikaishi=>'未开始',
            self::status_kaishi=>'抢单进行中',
            self::status_wancheng=>'抢单完成',

        ];
        if(!$status){
            return $list;
        }
        return isset($list[$status])?$list[$status]:'';
    }


    const proType_bendi=1;
    const proType_waidi=2;


    public static function getproType($status=null){
        $list=[
            self::proType_bendi=>'本地生产',
            self::proType_waidi=>'外地生产',

        ];
        if(!$status){
            return $list;
        }
        return isset($list[$status])?$list[$status]:'';
    }


    const proWay_liushui=1;
    const proWay_zhengti=2;


    public static function getproWay($status=null){
        $list=[
            self::proWay_liushui=>'流水做',
            self::proWay_zhengti=>'整体做',

        ];
        if(!$status){
            return $list;
        }
        return isset($list[$status])?$list[$status]:'';
    }



    const is_rob_qiangdan=1;
    const is_rob_putong=2;




    /**
     * 外发订单表
     */

    protected $table = 'orders_bales';
    protected $fillable = [
        'id','uid','name','cate','styleNo','styleName','num','money',
        'scence','material','tech','sizelist','img','imgDetails',
        'proType','region','proWay','period','stuff','deplete',
        'orderType','style','design','detail','outTypeStr',
        'is_rob','is_fabric','is_contract',
        'status','del','created_at','updated_at',
    ];

    /**
     * uid 用户UID
     * name 订单产品名称
     * cate 货单搜索分类，关联category的PID为167
     * styleNo 款号
     * styleName 款式名称
     * num 数量
     * money 单价
     * scence 适用场景
     * material 材质
     * tech 工艺要求
     * outTypeStr 货单分类集合，通过英文逗号隔开，
     *      关联category的，工厂外发PID=174，公司外发PID=185，
     * sizelist 尺寸颜色，二维数组json
            0S，1M，2L，3L，4XXL，5XXXL
            0白，1红，2蓝
     * img 主图
     * imgDetails 细节图集，json数组，
            0款式图、1粘衬部位、2背面图、3关键部位细节、4关键部位细节图
     * proType 外发要求，1本地生产，2外地生产
     * region 外发范围，地区选择
     * proWay 生产要求，1流水做，2整件做
     * period 截止有效时间
     * stuff 面辅料成分/缩率，二维数组json，
     *      key面辅料名称，val 成分缩率值
     * deplete 面辅料单耗，二维数组json，
     *      name 名称，size 规格，num 用量，remark 备注
     * orderType 产品类型，json，
     *      name 产品名称，male 男装，female 女装，child 童装
     * style 产品风格名称数组，通过||隔开
     * design 产品款式名称数组，通过||隔开
     * detail 货单描述
     * is_rob 是否抢单：1抢单，2普通单
     * is_fabric 是否提供原料面料：1不提供，2提供但未填写，3提供并已填写，
     * is_contract 订单合同：1未上传，2发单方上传，3合作方上传，
     * status 抢单状态：1未开始抢单，2抢单中，3已完成抢单
     */

    public function orderTemp()
    {
        return $this->hasOne(OrderTempModel::class, 'bale', 'id');
    }

    /**
     * 抢单人数
    */
    public static function getCount($id){
        return OrderTempModel::where([
            'bale'=>$id
        ])->count();
    }



    /**
     * 获取指定用于的货单数据
    */
    public static function getUserList($uid){
        $list= self::
            where('uid','=',$uid)->
            where('status','=',OrderBaleModel::status_kaishi)
            ->where('visible','=',OrderBaleModel::visible_show)
           ->where('period','>',time())
            ->where('del',0)->select('id','name','img','is_rob','period')
            ->orderBy('id','DESC')
            ->take(20)
            ->get()->toArray();
        foreach ($list as $key=>$vo) {
            $list[$key]['periodStr'] = "有效至<br>".date('m月d日',$vo['period']);
            $list[$key]['img']=Fun::pImg($vo['img']);
        }
        return $list;
    }



    public function attributeLabels() {
        return [
            'id' => '订单id',
            'uid' => '用户ID',
            'name' => '订单产品名称',
            'cate' => '货单分类',
            'styleNo' => '款号',
            'styleName' => '款式名称',
            'num' => '数量，件',
            'money' => '单价，元',
            'allmoney' => '总价',
            'scence' => '适用场景',
            'material' => '材质',
            'tech' => '工艺要求',
            'sizelist' => '尺码，数组json：
0S，1M，2L，3XL，4XXL，5XXXL；
0白，1红，2蓝；',
            'img' => '产品正面图',
            'imgDetails' => '细节图集，json数组，款式图、粘衬部位、背面图、关键部位细节、关键部位细节图',
            'proType' => '外发要求，1本地生产，2外地生产',
            'region' => '外发范围，地区选择',
            'proWay' => '生产要求，1流水做，2整件做',
            'outTypeStr' => '货单分类集合，通过英文逗号隔开，关联category的，工厂外发PID=174，公司外发PID=185，',
            'period' => '截止有效时间s 交货时间',
            'stuff' => '面辅料成分/缩率，二维数组json，key+val对',
            'deplete' => '面辅料单耗，二维数组json：name 名称，size 规格，num 用量，remark 备注',
            'orderType' => '产品类型，json：name 产品名称，male 男装，female 女装，child 童装',
            'style' => '产品风格名称数组，用||隔开',
            'design' => '产品款式名称数组，用||隔开',
            'detail' => '货单描述',
            'is_rob' => '是否抢单：1抢单，2普通单，',
            'is_fabric' => '是否提供原料面料：1不提供，2提供但未填写，3提供并已填写，',
            'is_contract' => '订单合同：1未上传，2发单方上传，3合作方上传，',
            'status' => '状态',
            'del' => '0不删除，1删除',
            'created_at' => '发布时间',
            'updated_at' => '更新',
            'bond' => '保证金  元 ',
            'level_DELETE_QIYONG' => '要求的等级',
            'paixu' => '排序',
            'count' => '抢单人数',
        ];
    }









    /**
     * 判断是否允许抢单,如果不允许,返回错误代码并附加错误信息,如果允许返回代码为0
     * 返回内容
     * [
     *  'code'=>0,  如果非0,表示有错误,不允许抢单
     * 'msg'=>'ok'  错误信息
     * ]
    */
    public static function yunxuqiangdan(&$data,$Uid){

        $juliObj=CompanyModel::getdistance($data['uid'],$Uid);
        //var_dump($juliObj);exit;
        $code=0;
        $yunxuxiadan_msg='';
        if($juliObj['code']==0){
            $juli=round($juliObj['msg']/1000,1);
        //    var_dump($juli);exit;
            if($data['proType']==OrderBaleModel::proType_bendi){///如果是本地类型
                if($juli>$data['juli']){///如果计算的距离大于设置距离,则提示错误
                    $data['yunxuxiadan']=false;
                    $code=1;
                    $yunxuxiadan_msg='发单方要求距离公司'.$data['juli'].'公里以内,您和发单方的距离是:'.$juli.'公里,不符合要求';
                }
            }elseif ($data['proType']==OrderBaleModel::proType_waidi){
                if($juli<$data['juli']){///如果计算的距离大于设置距离,则提示错误
                    $data['yunxuxiadan']=false;
                    $code=2;
                    $yunxuxiadan_msg='发单方要求距离公司'.$data['juli'].'公里的外地生产,您和发单方的距离是:'.$juli.'公里,不符合要求';
                }
            }else{
                $data['yunxuxiadan']=true;
                    $code=0;
            }
        }else{
           $yunxuxiadan_msg=$juliObj['msg'];
            $data['yunxuxiadan']=false;
                    $code=3;
        }

        $data['gongsicomCity']=$juliObj['gongsicomCity'];
        if($data['status']!==OrderBaleModel::status_kaishi){
            $yunxuxiadan_msg='订单未开始';
            $data['yunxuxiadan']=false;
                    $code=4;
        }
        if($data['period']<time()){
            $yunxuxiadan_msg='已经超过了截止抢单时间';
            $data['yunxuxiadan']=false;
                    $code=5;
        }
        return [
            'msg'=>$yunxuxiadan_msg,
            'code'=>$code
        ];
    }








}